Firebird - vyuzitie indexov pre "order by"
Otázka od: Roland Turcan
24. 9. 2004 11:29
Hello All!
Preco nepouzije dva indexy pre zotriedenie vyberu, pokial existuju na
oboch stlpcoch samostatne indexy.
----------------------------------
Priklad #1, je OK:
select a.cislo,a.rok from spisy a
order by a.cislo;
PLAN (A ORDER SPISY_CISLO)
----------------------------------
Priklad #2, je OK:
select a.cislo,a.rok from spisy a
order by a.rok;
PLAN (A ORDER IDX_SPISY_ROK)
----------------------------------
Priklad #3, preco nepouzije index:
select a.cislo,a.rok from spisy a
order by a.cislo,a.rok;
PLAN SORT ((A NATURAL))
----------------------------------
Priklad #4, preco nepouzije index:
select a.cislo,a.rok from spisy a
order by a.rok,a.cislo;
PLAN SORT ((A NATURAL))
----------------------------------
Dakujem.
--
Best regards, TRoland
http://www.rotursoft.sk
http://exekutor.rotursoft.sk
Odpovedá: Pavel Cisar
24. 9. 2004 12:19
Haj hou!
On 24 Sep 2004 at 12:28, Roland Turcan wrote:
> Preco nepouzije dva indexy pre zotriedenie vyberu, pokial existuju na
> oboch stlpcoch samostatne indexy.
>
> Priklad #3, preco nepouzije index:
>
> select a.cislo,a.rok from spisy a
> order by a.cislo,a.rok;
>
> PLAN SORT ((A NATURAL))
> ----------------------------------
> Priklad #4, preco nepouzije index:
>
> select a.cislo,a.rok from spisy a
> order by a.rok,a.cislo;
>
> PLAN SORT ((A NATURAL))
> ----------------------------------
Prave proto, ze se jedna o samostatne indexy. Pouziti indexu pro
realizaci order by, tedy serazeni znamena cteni radku v poradi danem
indexem. Pro cteni v poradi rok,cislo potrebuji index na rok+cislo,
abych mel cislo spravne serazene v ramci dane hodnoty rok, coz mi
samostatny index cislo nezajisti. Uvedom si, ze uvedeni vice polozek
v order by znamena vnorene skupiny. Pokud trvas na pouziti indexu,
vytvor index na rok+cislo, resp. na cislo+rok a Forebird ho pouzije.
Nicmene pouziti indexu pro order by ma vyznam pouze pokud potrebujes
rychle dostat prvni radky vysledku. Pokud ti jde o nacteni cele
mnoziny, pak cteni dle poradi indexu je typicky pomalejsi nez
sekvencni cteni s naslednym setridenim, obvzlaste pokud se tridi v
pameti.
S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase
Odpovedá: Tomas Bradle
24. 9. 2004 13:51
Kdyz uz jsme u toho, plati totez u podminky WHERE ?
Napr. : WHERE ROK=1998 AND CISLO>456
Jestli ano, musi odpovidat poradi klicu v indexu poradi sloupcu v podmince ?
diky
Tomas Bradle
t.bradle@worldonline.cz
----- Original Message -----
From: "Pavel Cisar" <pcb@atlas.cz>
To: <delphi-l@clexpert.cz>
Sent: Friday, September 24, 2004 1:18 PM
Subject: Re: Firebird - vyuzitie indexov pre "order by"
> Prave proto, ze se jedna o samostatne indexy. Pouziti indexu pro
> realizaci order by, tedy serazeni znamena cteni radku v poradi danem
> indexem. Pro cteni v poradi rok,cislo potrebuji index na rok+cislo,
> abych mel cislo spravne serazene v ramci dane hodnoty rok, coz mi
> samostatny index cislo nezajisti. Uvedom si, ze uvedeni vice polozek
> v order by znamena vnorene skupiny. Pokud trvas na pouziti indexu,
> vytvor index na rok+cislo, resp. na cislo+rok a Forebird ho pouzije.
>
> Nicmene pouziti indexu pro order by ma vyznam pouze pokud potrebujes
> rychle dostat prvni radky vysledku. Pokud ti jde o nacteni cele
> mnoziny, pak cteni dle poradi indexu je typicky pomalejsi nez
> sekvencni cteni s naslednym setridenim, obvzlaste pokud se tridi v
> pameti.
>
Odpovedá: Tomas Michalik
24. 9. 2004 14:15
Tomas Bradle wrote:
> Kdyz uz jsme u toho, plati totez u podminky WHERE ?
> Napr. : WHERE ROK=1998 AND CISLO>456
> Jestli ano, musi odpovidat poradi klicu v indexu poradi sloupcu v podmince ?
Neplati, mohou byt pouzity samostatne indexy.
Tom
========================
Tomas Michalik
vyvoj IS
ProCA, spol. s r.o.
V Luzich 818
Praha 4 - Libus
140 00, Czech Republic
tel: +420 234646446
fax: +420 234646120
michalik@proca.cz
http://www.proca.cz